﻿using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using MySql.Data.MySqlClient;

namespace Persistente.PEvento
{
    public class PEvento
    {   
        private DB_FINALCOUNTDOWN _db;
        private MySqlConnection _conexao = new MySqlConnection(ConfigurationManager.ConnectionStrings["DB_FINALCOUNTDOWN_SQL"].ConnectionString);

        public bool Salvar(string nmEvento, DateTime dtEvento, int nrStatus)
        {
            var obTbEvento = new tb_eventos();
            _db = new DB_FINALCOUNTDOWN();
            try
            {

                obTbEvento.nm_evento = nmEvento;
                obTbEvento.dt_evento = dtEvento;
                obTbEvento.nr_status = nrStatus;
                _db.AddTotb_eventos(obTbEvento);
                _db.SaveChanges();
                return true;
            }
            catch (Exception e)
            {
                return false;
            }
            finally
            {
                _db.Connection.Close();
            }

        }

        public DataSet pegarEventos(string nmEvento, string dtEvento, int nrStatus)
        {
            var ds = new DataSet();

            string query = "SELECT ";
            query += " id_evento";
            query += ", nm_evento";
            query += ", dt_evento";
            query += ", nr_status";
            query += " FROM tb_eventos";

            query += " WHERE 1 = 1";

            if (!string.IsNullOrEmpty(nmEvento))
            {
                query += " AND nm_evento LIKE '%" + nmEvento + "%'";
            } 
            if (!string.IsNullOrEmpty(dtEvento) && dtEvento != "__/__/____")
            {
                query += " AND dt_evento = " + Convert.ToDateTime(dtEvento);
            }
            if(nrStatus != 0)
            {
                query += " AND nr_status = " + nrStatus;
            }

            var cmd = new MySqlCommand(query, _conexao);

            cmd.Connection = _conexao;

            if (_conexao.State == ConnectionState.Closed)
            {
                _conexao.Open();
            }

            var dataAdapter = new MySqlDataAdapter(cmd);
            dataAdapter.Fill(ds);

            _conexao.Close();

            return ds;
        }

        public bool Remover(int idEvento)
        {
            try
            {
                _db = new DB_FINALCOUNTDOWN();
                var obTbEvento = _db.tb_eventos.Where(q => q.id_evento == idEvento).FirstOrDefault();
                if (obTbEvento == null)
                {
                    return false;
                }
                else
                {
                    var obLstAtividades = _db.tb_atividades.Where(q => q.id_evento == idEvento).ToList();
                    if(obLstAtividades.Count() > 0)
                    {
                        foreach (var obTbAtividade in obLstAtividades)
                        {
                            _db.tb_atividades.DeleteObject(obTbAtividade);
                            _db.SaveChanges();
                        }
                    }
                    _db.tb_eventos.DeleteObject(obTbEvento);
                    _db.SaveChanges();
                    return true;
                }

            }
            catch (Exception e)
            {
                throw;
            }
            finally
            {
                _db.Connection.Close();
            }
        }

        public tb_eventos pegarEventoPorId(int idEvento)
        {
            var obTbEvento = new tb_eventos();
            try
            {
                _db = new DB_FINALCOUNTDOWN();
                obTbEvento = _db.tb_eventos.Where(q => q.id_evento == idEvento).FirstOrDefault();
            }catch(Exception e)
            {
                throw e;
            }finally
            {
                _db.Connection.Close();
            }
            return obTbEvento;
        }

        public bool Alterar(tb_eventos obTbEventoNovo)
        {
            try
            {
                _db = new DB_FINALCOUNTDOWN();
                var obTbEventoVelho =
                    _db.tb_eventos.Where(q => q.id_evento == obTbEventoNovo.id_evento).FirstOrDefault();
                obTbEventoVelho.nm_evento = obTbEventoNovo.nm_evento;
                obTbEventoVelho.dt_evento = obTbEventoNovo.dt_evento;
                obTbEventoVelho.nr_status = obTbEventoNovo.nr_status;

                _db.SaveChanges();
                return true;
            }catch(Exception e)
            {
                return false;
            }finally
            {
                _db.Connection.Close();
            }
        }

        public List<tb_eventos> pegarEventosAtivos()
        {
            var obLstEventos = new List<tb_eventos>();
            try
            {
                _db = new DB_FINALCOUNTDOWN();
                obLstEventos = _db.tb_eventos.Where(q => q.nr_status == 1).ToList();
            }
            catch (Exception e)
            {
                    
                throw e;
            }finally
            {
                _db.Connection.Close();
            }

            return obLstEventos;
        }

        public bool fecharEvento(int idEvento)
        {
            try
            {
                _db = new DB_FINALCOUNTDOWN();
                var obTbEventoVelho =
                    _db.tb_eventos.Where(q => q.id_evento == idEvento).FirstOrDefault();
                obTbEventoVelho.nr_status = 2;

                _db.SaveChanges();
                return true;
            }
            catch (Exception e)
            {
                return false;
            }
            finally
            {
                _db.Connection.Close();
            }
        }
    }
}
